home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / UTILFILE / TWNCOPY.LZH / HACK.ASM < prev    next >
Assembly Source File  |  1986-05-06  |  2KB  |  72 lines

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;
  3. ;  HACK.ASM - program to intercept writes to disk A.  Allows write command
  4. ;          to proceed normally, but always return with no errors.
  5. ;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7. ;
  8. CODE      SEGMENT
  9.       ASSUME cs:CODE,ds:CODE,es:nothing
  10. ;
  11. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  12. ;
  13.       org     0100h               ; this will be a .com program
  14. ;
  15. install:
  16.       call     save_isrs           ; save current interrupt service routines
  17.       call     set_isrs           ; set new interrupt services
  18.       mov     dx,offset last_adr+1  ; terminate and stay resident
  19.       int     27h
  20. ;
  21. int13      proc     far
  22.       cmp     ah,3               ; is this a write operation ?
  23.       jne     int_cont           ; no, continue...else
  24.       cmp     dl,0               ; is it to drive a: ?
  25.       jne     int_cont           ; no, continue...else
  26.       pushf                ; do diskette BIOS call
  27.       call     cs:[old_diskrtn]      ; (simulate interrupt)
  28.       xor     ah,ah               ; set to no errors
  29.       clc
  30.       ret     2               ; throw away saved flags
  31. ;
  32. int_cont:
  33.       jmp     cs:[old_diskrtn]
  34. int13      endp
  35. ;
  36. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  37. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  38. ;
  39. ;  save_isrs - save current interrupt service routine addresses for diskette
  40. ;           interrupt (13h)
  41. ;
  42. save_isrs proc     near
  43.       mov     al,13h            ; get current diskette interrupt
  44.       mov     ah,35h            ; pointer using DOS call
  45.       int     21h
  46.       mov     word ptr old_diskrtn,bx    ; save offset
  47.       mov     word ptr old_diskrtn[2],es    ; and segment
  48.       ret
  49. save_isrs endp
  50. ;
  51. old_diskrtn  dd  ?               ; reserve space for original disk isr
  52. ;
  53. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  54. ;
  55. ;  set_isrs - set new service routine for diskette interrupt
  56. ;
  57. set_isrs  proc     near
  58.       mov     dx,offset int13       ; set new diskette routine
  59.       mov     al,13h            ; isr for interrupt 13
  60.       mov     ah,25h
  61.       int     21h
  62.       ret
  63. set_isrs  endp
  64. ;
  65. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  66. ;
  67. last_adr  db     0
  68. ;
  69. CODE      ENDS
  70. ;
  71.       end     install
  72.